import { ArticleComment, ArticleDetail } from "@/types/data"; // 导入文章详情类型
import { ArticleAction } from "@/types/store"; // 导入文章操作类型

// 定义文章状态类型
type ArticleState = {
  // 文章详情
  detail: ArticleDetail;
  //评论内容
  comment: ArticleComment;
};

// 初始状态
const initialState = {
  detail: {}, //文章数据
  // 评论列表数据
  comment: {
    // 注意：此处为 results 属性设置默认值为数组。这样，不管有没有评论数据，results 都是一个数组
    results: [] as ArticleComment["results"],
  },
} as ArticleState;

// 文章 reducer 函数
const article = (state = initialState, action: ArticleAction): ArticleState => {
  // 处理获取文章详情的 action
  if (action.type === "article/get") {
    return {
      ...state,
      detail: action.payload, // 更新文章详情
    };
  }
  // 处理获取评论的 action
  if (action.type === "article/comments") {
    return {
      ...state,
      comment: {
        ...action.payload,
        results: [...action.payload.results, ...state.comment.results], // 将新评论追加到原有评论后面
      },
    };
  }
  // 统一处理 关注、收藏、点赞 三个状态的 action
  if (action.type === "article/updateInfo") {
    return {
      ...state,
      detail: {
        ...state.detail,
        [action.payload.name]: action.payload.value, // 更新对应状态
      },
    };
  }
  if (action.type === "comment/updateInfo") {
    return {
      ...state,
      comment: {
        ...state.comment,
        results: state.comment.results.map((item) => {
          if (item.com_id === action.payload.target) {
            return {
              ...item,
              [action.payload.name]: action.payload.value,
              like_count: item.like_count + action.payload.like_count,
            };
          }
          return item;
        }),
      },
    };
  }
  // 如果 action 类型不是上述两种，则返回原始状态
  return state;
};

export default article; // 导出文章 reducer
